package com.probox.activity.api.domain;

import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.probox.common.core.annotation.Excel;
import com.probox.common.core.enums.CouponTypeEnum;
import com.probox.common.core.utils.DateUtils;
import com.probox.common.core.utils.money.PriceFormatUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 优惠券明细
 */
@Data
@ApiModel("优惠券领取明细")
public class CouponInfoDetailVo implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    //优惠券详情ID
    @ApiModelProperty(value = "优惠券详情ID")
    private Long detailUid;

    /** 领取人ID */
    @Excel(name = "领取人ID")
    @ApiModelProperty(value = "领取人ID(领取人ID)")
    private Long customerUid;

    /** 领取人 */
    @Excel(name = "领取人")
    @ApiModelProperty(value = "领取人(领取人)")
    private String customerName;

    /** 领取人头像 */
    @Excel(name = "领取人头像")
    @ApiModelProperty(value = "领取人头像(领取人头像)")
    private String customerUrl;

    /** 优惠券ID */
    @Excel(name = "优惠券ID")
    @ApiModelProperty(value = "优惠券ID(优惠券ID)")
    private Long couponUid;

    /** 优惠券平台ID */
    @Excel(name = "优惠券平台ID")
    @ApiModelProperty(value = "优惠券平台ID(优惠券平台ID)")
    private Long platformUid;

    /** 优惠券名称 */
    @Excel(name = "优惠券名称")
    @ApiModelProperty(value = "优惠券名称(优惠券名称)")
    private String couponName;

    /** 类型 满减券1/折扣券2 */
    @Excel(name = "类型 满减券1/折扣券2")
    @ApiModelProperty(value = "类型 满减券1/折扣券2(类型 满减券1/折扣券2)")
    private String couponType;

    /** 优惠券图标 */
    @Excel(name = "优惠券图标")
    @ApiModelProperty(value = "优惠券图标(优惠券图标)")
    private String couponIconUrl;

    /** 满减券时：优惠券金额/折扣券时：折扣率 */
    @Excel(name = "满减券时：优惠券金额/折扣券时：折扣率")
    @ApiModelProperty(value = "满减券时：优惠券金额/折扣券时：折扣率(满减券时：优惠券金额/折扣券时：折扣率)")
    private Long couponAmount;

    /** 满减基数金额 */
    @Excel(name = "满减基数金额")
    @ApiModelProperty(value = "满减基数金额(满减基数金额)")
    private Long baseAmount;

    private String couponProType;

    /**
     * 适用商品ID集合
     */
    @ApiModelProperty(value = "适用商品ID集合")
    private String couponProUids;

    /** 生效时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "生效时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "生效时间(生效时间)")
    private Date couponStartDate;

    /** 优惠券到期时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "优惠券到期时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "优惠券到期时间(优惠券到期时间)")
    private Date couponEndDate;

    /** 描述 */
    @Excel(name = "描述")
    @ApiModelProperty(value = "描述(描述)")
    private String couponDesc;

    /** 数据状态 1有效-1删除 */
    @Excel(name = "数据状态 1有效-1删除")
    @ApiModelProperty(value = "数据状态 1有效-1删除(数据状态 1有效-1删除)")
    private String dataStatus;

    /** 是否使用 0 未使用  1已使用 -1锁定 */
    @Excel(name = "是否使用 0 未使用  1已使用 -1锁定")
    @ApiModelProperty(value = "是否使用 0 未使用  1已使用 -1锁定(是否使用 0 未使用  1已使用 -1锁定)")
    private String isUsed;

    /** 使用时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "使用时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "使用时间(使用时间)")
    private Date usedTime;

    /** 获得时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "获得时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "获得时间(获得时间)")
    private Date createTime;

    /** 优惠券来源 Get,VIP,Register */
    @Excel(name = "优惠券来源 Get,VIP,Register")
    @ApiModelProperty(value = "优惠券来源 Get,VIP,Register(优惠券来源 Get,VIP,Register)")
    private String couponSource;

    /**
     * 客户运营ID
     * @return
     */
    private Long operationUid;

    public String getCouponAmountStr() {
        if (CouponTypeEnum.discount.getKey().equals(couponType)) {
            return PriceFormatUtil.formatDiscount(couponAmount)+"折";
        }else{
            return "满"+PriceFormatUtil.format(baseAmount)+"元减"+PriceFormatUtil.format(couponAmount)+"元";
        }
    }

    public String getBaseAmountStr(){
        return PriceFormatUtil.format(baseAmount);
    }

    public String getCouponStartDateStr(){
        return DateUtils.formateToday(couponStartDate);
    }

    public String getCouponEndDateStr() {
        return DateUtils.formateToday(couponEndDate);
    }

    public String getCanUse() {
        if ("1".equals(isUsed)) return "0";
        if (ObjectUtil.isNotEmpty(couponEndDate) && couponEndDate.getTime()<System.currentTimeMillis()) return "0";
        if (ObjectUtil.isNotEmpty(couponStartDate) && couponStartDate.getTime()>System.currentTimeMillis()) return "0";
        return "1";
    }

    public String getCanUseName() {
        if ("1".equals(isUsed)) return "已使用";
        if (ObjectUtil.isNotEmpty(couponEndDate) && couponEndDate.getTime()<System.currentTimeMillis()) return "已过期";
        if (ObjectUtil.isNotEmpty(couponStartDate) && couponStartDate.getTime()>System.currentTimeMillis()) return "限时使用";
        return "可以使用";
    }

    public String getCouponTypeName() {
        return CouponTypeEnum.getNameByKey(couponType);
    }

    private String isExclusive;

}
